#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//int main() {
//	int a = 2;
//	int b = 1;
//	a = a ^ b;
//	b = a ^ b;
//	a = a ^ b;
//	printf("%d %d", a, b);
//	system("pause");
//}
//int main() {
//	int a = 0;
//	scanf("%d", &a);
//	int count = 0;
//	for (int i = 0; i < 32; i++) {
//		count += a & 1;
//		a=a >> 1;
//	}
//	printf("%d的二进制补码1的个数为%d", count);
//	system("pause");
//}
//void show1(int a) {
//	for (int i = 0; i < 32; i++) {
//		int count = a & 1;
//		a = a >> 1;
//		if (count == 1) {
//			printf("%d", 1);
//		}
//	}
//}
//void show0(int a) {
//	for (int i = 0; i < 32; i++) {
//		int count = a & 1;
//		a = a >> 1;
//		if (count == 0) {
//			printf("%d", 0);
//		}
//	}
//}
//int main() {
//	int a = 0;
//	scanf("%d", &a);
//    偶数位
//	printf("偶数位是");
//	show0(a, 0);
//	奇数位
//	printf("\n奇数位是");
//	show1(a, 1);
//	system("pause");
//}
int main() {
	int a = 0;
	int b = 0;
	int count = 0;
	scanf("%d %d", &a, &b);
	for (int i = 0; i < 32; i++) {
		int suma = a & 1;
		int sumb = b & 1;
		if (suma != sumb) {
			count++;
		}
		a = a >> 1;
		b = b >> 1;
	}
	printf("%d", count);
	system("pause");
}
//int main()
//{
//	int a, b, c;
//	a = 5;
//	c = ++a;
//	b = 0;
//	printf("a = %d b = %d c = %d\n:", a, b, c);
//	//b = ++c, c++, ++a, a++;
//	b = ++c;
//	c = c++;
//	c = ++a;
//	a = a++;
//
//	printf("a = %d b = %d c = %d\n:", a, b, c);
//	b += a++ + c;
//	printf("a = %d b = %d c = %d\n:", a, b, c);
//	printf("a = %d b = %d c = %d\n:", a, b, c);
//	system("pause");
//}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <limits.h>
//int main() {
//unsigned char c = -128;
//printf("%u", c);
//system("pause");

	/*char a = -1;
	signed char b = -1;
	unsigned char c = -1;
	printf("a=%d,b=%d,c=%d", a, b, c);
	system("pause");*/
//}
//#include <string.h>
形如将1 2 3 按3 2 1 输出的一题
//shu(char arr[100]) {
//	int count = 0;
//	char* q = arr;
//	while (1) {
//		if (*q=='\0') {
//			break;
//		}
//		q++;
//		count++;
//	}
//	char* p[100] = {0};
//	p[0] = arr;
//	int sum = 1;
//	for(int i = 0; i < count; i++) {
//		if (arr[i] ==' ') {
//			arr[i] = '\0';
//			p[sum] = &arr[i + 1];
//			sum++;
//		}
//		arr++;
//	}
//	for (int i = sum-1; i >=0; i--) {
//		printf("%s ", p[i]);
//	}
//}
//int main() {
//	char arr[100] = "";
//	gets(arr);
//	/*shu(arr);*/
//	char* p[10] = { 0 };
//	p[0] = arr;
//	int sum = 1;
//	for (int i = 0; i < 5; i++) {
//		if (arr[i] == ' ') {
//			arr[i] = '\0';
//			p[sum] = &arr[i + 1];
//			sum++;
//		}
//	}
//	for (int i = sum - 1; i >= 0; i--) {
//		printf("%s ", p[i]);
//	}
//	system("pause");
//}
最小公倍数
//int main() {
//	int a = 5;
//	int b = 7;
//	int max = (a > b) ? a : b;
//	int ret = 0;
//	for (int i = max;; i++) {
//		if (i % a == 0 && i % b == 0) {
//			ret = i;
//			break;
//		}
//	}
//	printf("%d", ret);
//	system("pause");
//}
最大公因数
int main() {
	int a = 0;
	int b = 0;
	scanf("%d %d", &a,&b);
	int max = (a > b) ? a : b;
	int n = 0;
	int sum = 0;
	while (1) {
		int q = a + b - max;
		n = max % q;
		if (n == 0) {
			sum = q;
			break;
		}
		max = b;
		q = n;

		
	}
	printf("%d", sum);
	system("pause");

}1